#include<stdio.h> 
#include<unistd.h>
#include<string.h>
#include<stdlib.h>
//int main() {
//int g_unval;
//int g_val=100;
//
//   int main()
//{
//      char *s="hello world";
//      printf("code addr :%p\n",main);
//      //如果是&s取的是s变量存放的地址
//      printf("string rdonly addr:%p\n");
//      printf("unint addr:%p\n",&g_unval);
//      printf("init   addr:%p\n",&g_val);
//
//      char *heap=(char*)malloc(10);
//      char *heap1=(char*)malloc(10);
//      char *heap2=(char*)malloc(10);
//      char *heap3=(char*)malloc(10);
//      char *heap4=(char*)malloc(10);
//      printf("heap addr:%p\n",heap);
//
//      printf("heap1addr:%p\n",heap1);
//      printf("heap2addr:%p\n",heap2);
//      printf("heap3addr:%p\n",heap3);
//      printf("stack addr:%p\n",&s);
//      printf("stack  addr:%p\n",&heap);
//      
//      int a=10;
//      int b=20;
//      printf("stack addr:%p\n",&a);
//      printf("stack addr:%p\n",&b);
//
//
//
//
//
//
//
//
//
//
int g_val=100;
int main(int argc, char *argv[], char *env[])
{
  //const char *a="hello world";
  //const char *b="hello world";

  //printf("%p\n",a;
  //printf("%p\n",b);
  //验证命令行参数环境变量
  const char *s ="hello world";
      printf("code addr: %p\n", main);
      printf("string rdonly addr: %p\n", s);
      printf("init addr: %p\n", &g_val);
         char *heap1 = (char*)malloc(10);
         char *heap2 = (char*)malloc(10);
         char *heap3 = (char*)malloc(10);
         char *heap4 = (char*)malloc(10);
     
         printf("heap addr: %p\n", heap1);
         printf("heap addr: %p\n", heap2);
         printf("heap addr: %p\n", heap3);
         printf("heap addr: %p\n", heap4);
     
         printf("stack addr: %p\n", &s);
         printf("stack addr: %p\n", &heap1);
         int a = 10;
         int b = 30;
         printf("stack addr: %p\n", &a);
         printf("stack addr: %p\n", &b);
     
         for(int i = 0; argv[i]; i++){
             printf("argv[%d]: %p\n", i, argv[i]);
         }
     
         for(int i =0; env[i] ;i++){
             printf("env[%d]: %p\n", i, env[i]);
         }
      }
//
//int g_val=100;
//
//int main()
//{
//
//  if(fork()==0)
//  {
//    int sum=5;
//    while(sum)
//    {
//      printf("i am child,times:%d,g_val=%d,&g_val=%p\n",sum,g_val,&g_val);
//      sum--;
//      sleep(1);
//       if(sum==3)
//       {
//         printf("^^^^^^^^^^child更改数据^^^^^^^^^\n");
//         g_val=3;
//         printf("^^^^^^^^^^child更改数据完毕^^^^^^^^^\n");
//       }
//    }
//  }
//    else
//    {
//      while(1)
//      {
//        printf("i am father,g_val=%d,&g_val=%p\n",g_val,&g_val);
//        sleep(1);
//      }
//    }
//  
//  
//  return 0;
//}
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//  //extern char **environ; for(int i=0;environ[i];i++)
//  //printf("i am a process , pid:%d ,ppod:%d\n",getpid(),getppid());
//  //{
//  //  printf("PATH:%s\n",getenv("PATH"));
//  //  printf("HOME:%s\n",getenv("HOME"));
//  //  printf("SHELL:%s\n",getenv("SHELL"));
//
////int main(int argc,char *argv[],char *env[]) {
////  for(int i=0;env[i];i++)
////  {
////    printf("%d->%s\n",i,env[i]);
////  }
////  //if(argc !=2) return 1;
////  //if(strcmp(argv[1],"-h")==0)
////  //{
////  //  printf("hello hh!\n");
////  //}
////  //else if(strcmp(argv[1],"-a")==0)
////  //{
////  //  printf("hello aa!\n");
////  //}
////  //else
////  //{
////  //  printf("hello else!\n");
////  //}
////  
////  //for(int i=0;i<argc;i++)
////  //{
////  //  printf("argv[%d]->%s\n",i,argv[i]);
////  //}
////  // int cnt=5;
//// // while(cnt) {
//// //       sleep(1);
//// //       printf("I am cmd -> process!\n");
//// //       cnt--;
//// //   //printf("i am a process , pid:%d ,ppod:%d\n",getpid(),getppid());
//// //   //sleep(1);
//// // }
////  return 0;
////
////}
